/**
 * 私有成员和公有成员
 */

class User {

    constructor(name, age) {

        // [Symbol('fn')]= name
        // 这里的这个属性就是私有成员， 不会被访问到
        this[Symbol('fn')] = name

        // 下面这个就是公有属性
        this.age = age
    }
}

const user = new User('ck', 19)

// 只能访问到基本属性
for (let item in user) {
    console.log(item, user[item])
}

// 只能访问到Symbol属性
for (let item in Object.getOwnPropertySymbols(user)) {
    console.log(item, user[item])
}

// 可以访问到所有的属性
for (let item of Reflect.ownKeys(user)) {
    console.log(item, user[item])
}


class Cache {
    static data = {}

    // 这里不能使用constructor因为，
    // 下面使用的静态的方法，没有实例化， 这里的this.data还没有被初始化。
    // constructor() {
    //     this.data = {}
    // }

    static set(key, value) {
        this.data[key] = value
    }

    static get(key) {
        return this.data[key]
    }

}

const person = {
    name: 'ck',
    key: Symbol('person')
}

const student = {
    name: 'kb',
    key: Symbol('student')
}

Cache.set(student.key, '这是学生存储的信息')
console.log(Cache.get(student.key))
